package com.tbit.uqbike.webmanager.dao.core;

import com.tbit.uqbike.object.pojo.Recharge;
import com.tbit.uqbike.object.pojo.statistics.BrandSerialDaySta;
import org.apache.ibatis.annotations.MapKey;
import org.apache.ibatis.annotations.Param;

import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * @Author: chen
 * @Description: 充值记录
 * @Date: 创建于 15:54 2020/7/2
 */
public interface RechargeDao {

    /**
     * 分页详细
     *
     * @param map
     * @return
     */
    List<Recharge> queryPage(Map<String, Object> map);

    /**
     * 分页总数
     *
     * @param map
     * @return
     */
    Integer queryCount(Map<String, Object> map);

    /**
     * 导出
     *
     * @param map
     * @return
     */
    List<Recharge> export(Map<String, Object> map);

    /**
     * 查询某个用户某个时间段内的订单数据
     *
     * @param map
     * @return
     */
    List<Recharge> getByTime(Map<String, Object> map);

    /**
     * 查询某个用户某个时间段内的订单数据并进行排序
     *
     * @param map
     * @return
     */
    List<Recharge> getByTimeOrderBy(Map<String, Object> map);


    Map<String, Object> selectRechargeTotal(Map<String, Object> params);

    List<Map<String, Object>> getBalanceByArea(HashMap<String, Object> params);

    Recharge selectByOrderNO(String orderNO);

    /**
     * 获取用户充值记录（充值到余额）
     *
     * @param map 地图
     * @return {@link List}<{@link Recharge}>
     */
    Recharge getRechargeMoney(Map<String, Object> map);

    /**
     * 查询充值记录
     *
     * @param params 参数个数
     * @return {@link List}<{@link Recharge}>
     */
    BrandSerialDaySta groupType(Map<String, Object> params);


    /**
     * 获取品牌的最早充值数据
     *
     * @param brandId 品牌标识
     * @return {@link String}
     */
    String getEarliestData(Integer brandId);


    /**
     * 获取用户最近的充值记录
     *
     * @param userId 用户id
     * @return {@link Recharge}
     */
    List<Recharge> getRecentlyDate(Integer userId);

    /**
     * 导出余额充值
     *
     * @param map
     * @return
     */
    List<Recharge> exportBalance(Map<String, Object> map);

    /**
     * 统计充值总金额和充值总订单数
     *
     * @param startTime
     * @param endTime
     * @param accountId
     * @return
     */
    @MapKey("adAccountId")
    Map<Integer, Map> sumGroupByAdAccountId(@Param("startTime") Date startTime, @Param("endTime") Date endTime, @Param("accountIds") List<Integer> accountId);

    /**
     * 查询用户是否存在支付分订单
     *
     * @param userId
     * @return
     */
    int selectPayGradesCountByUserId(@Param("userId") Integer userId);

    /**
     * 商户平台总收入
     *
     * @return .
     */
    List<Map<String, Object>> queryRideMerchantPlatformRevenue(@Param("brandId") Integer brandId, @Param("accountId") List<Integer> accountId, @Param("startTime") Date startTime, @Param("endTime") Date endTime, @Param("type") Integer type);


    /**
     * 汇付运营收入
     *
     * @return .
     */
    List<Map<String, Object>> queryRideHSBCOperationalRevenue(@Param("brandId") Integer brandId, @Param("accountId") List<Integer> accountId, @Param("startTime") Date startTime, @Param("endTime") Date endTime, @Param("type") Integer type);

    /**
     * 根据订单编号查询
     *
     * @param orderNO
     * @return
     */
    Recharge getRechargeByOrderNO(String orderNO);

    /**
     * 根据订单编号查询
     *
     * @param orderNO
     * @return
     */
    Recharge findRechargeByOrderNO(String orderNO);
}
